package handler;

import entity.BaseHead;
import entity.enums.HikLiftStatus;
import entity.enums.HikMsgType;
import global.InitCache;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import log.LogInfo;
import util.ActionProcessor;

/**
 * 报文业务处理逻辑
 *
 * @author zhouwz
 * @date 2020/11/3 15:01
 */
@ChannelHandler.Sharable
public class MsgHandler extends ChannelInboundHandlerAdapter {

    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) {
        try {
            BaseHead baseHead = (BaseHead) msg;
            LogInfo.threadAndMsg(baseHead.getHikMsgType());
            switch (baseHead.getHikMsgType()) {
                // 点位上报回复、状态上报回复忽视(在解码的时候已经将缓存信息读取掉了)
                case REPORT_NODE_SWITCH_REQ:
                    InitCache.repQueue.offer(HikMsgType.REPORT_NODE_SWITCH_RSQ);
                    InitCache.repQueue.offer(HikMsgType.REPORT_NODE_REQ);
                    break;
                case REGISTER_RSQ:
                    // 注册成功后由不断申请注册改为不断上报实时状态
                    InitCache.registered = true;
                    break;
                case EMPTY_RECTILINEAR_MOTION_REQ:
                    InitCache.repQueue.offer(HikMsgType.EMPTY_RECTILINEAR_MOTION_RSQ);
                    ActionProcessor.commonMovePartInit(baseHead);
                    InitCache.realtimeStatus.setShelfCode(null);
                    break;
                case PICK_OVERLAY_RECTILINEAR_MOTION_REQ:
                    InitCache.repQueue.offer(HikMsgType.PICK_OVERLAY_RECTILINEAR_MOTION_RSQ);
                    ActionProcessor.commonMovePartInit(baseHead, HikLiftStatus.LIFT);
                    break;
                case ONLY_LOWER_CONTROL_REQ:
                    InitCache.repQueue.offer(HikMsgType.ONLY_LOWER_CONTROL_RSQ);
                    InitCache.realtimeStatus.setHikLiftStatus(HikLiftStatus.DROP);
                    break;
                case DETECTION_CONTROL_REQ:
                    InitCache.repQueue.offer(HikMsgType.DETECTION_CONTROL_RSQ);
                    InitCache.repQueue.offer(HikMsgType.REPORT_DEVICE_STATE_REQ_3);
                    break;
                default:
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
